/*
 * Copyright (C) 2011 SANSOU SYSTEMS Co., Ltd. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jp.co.sansou.android.atnd.util;

import java.io.ByteArrayOutputStream;
import java.util.Arrays;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.json.JSONObject;

import android.net.http.AndroidHttpClient;
import android.util.Log;

public abstract class AbsAtndEvent {

	/**
	 * <pre>
	 * ATNDより検索条件に一致するイベント情報一覧をJSON形式（JSONObject型）で取得します。
	 * JSONObjectの中身を取得するためのキー項目は「AtndUsersJsonKeys」列挙型で管理されてます。
	 * </pre>
	 * 
	 * @return
	 */
	protected JSONObject searchAndReturnJson(String searchStr) {
		AndroidHttpClient httpClient = AndroidHttpClient.newInstance("ATN");

		// HTTPメソッド『GET』を使用してATNDのイベント情報を取得する。
		HttpGet request = new HttpGet(searchStr);
		HttpResponse httpResponse = null;

		try {
			httpResponse = httpClient.execute(request);
			int status = httpResponse.getStatusLine().getStatusCode();

			// HTTPのリザルトコードが200番だったら成功
			if (HttpStatus.SC_OK == status) {

				ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
				httpResponse.getEntity().writeTo(outputStream);
				String data = outputStream.toString();

				// GETで取得したデータからJSONObjectを生成します。
				JSONObject json = new JSONObject(data);
				return json;
			} else {
				Log.d("JSONSampleActivity", "Status" + status);
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} finally {
			httpClient.close();
		}
	}

	/**
	 * 「&」区切りのURLパラメータ文字列を生成して返します。
	 * 
	 * @see AtndEventSearchKeys
	 * @param key
	 *            クエリ文字列（キー）
	 * @param value
	 *            クエリ文字列（値）
	 * @return
	 */
	protected String getAppendParamStr(Enum key, Object value) {
		return "&" + key + "=" + value;
	}

	/**
	 * <pre>
	 * 指定された配列をカンマ区切りの文字列にして返却します。
	 * 引数がnull又は要素数0の配列の場合nullを返します。
	 * </pre>
	 * 
	 * @param ary
	 *            int[]やString[]などの配列
	 * @return カンマ区切り文字列
	 */
	protected String toCsv(String... ary) {
		String result = null;
		if (ary != null && ary.length > 0 && ary[0] != null) {
			result = Arrays.toString(ary).replace("[", "").replace("]", "")
					.replaceAll(" ", "");
		}
		return result;
	}

	protected String toCsvInt(int... ary) {
		StringBuilder result = new StringBuilder();

		if (ary != null && ary.length > 0) {
			boolean flg = true;
			for (int temp : ary) {
				if (flg) {
					flg = false;
				} else {
					result.append(",");
				}
				result.append(temp);
			}
		}

		return result.toString();
	}

	protected boolean isSettingStrParam(String[] params) {
		if (params != null && params.length > 0 && params[0] != null) {
			return true;
		} else {
			return false;
		}
	}

	protected boolean isSettingIntParam(int[] params) {
		if (params != null && params.length > 0) {
			return true;
		} else {
			return false;
		}
	}
}
